// Pow(x,n)

package Leetcode;

class solution_050 {
    public double myPow(double x, int n) {
        // 负数最小值无法转为正数，单独讨论
        if (n == Integer.MIN_VALUE)
            return (1 / x) * myPow(x, n + 1);
        // 如果输入的是正数
        if (n < 0) {
            n = -n;
            x = 1 / x;
        }
        // 当二进制最后一位是1时与结果相乘
        double result = 1;
        while (n != 0) {
            if ((n & 1) == 1)
                result *= x;
            x *= x;
            n >>= 1;
        }
        return result;
    }
}

public class Solution050 {

}